package vim.meet.aspect;

/**
 * 
 * 2016年11月21日
 * execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern
 * (param-pattern) throws-pattern?)
 * 
 * 除了ret-type-pattern 与 name-pattern 其它的都是可选的
 * param-type:
 * () 匹配没有参数的方法
 * (..)匹配任意个数参数方法
 * (*)匹配一个任意类型的参数方法
 * (*,String) 匹配2个参数，第一个任意类型，第2个String
 */
public class AspectExecution {
	/**
	 * 匹配任意public方法
	 */
//	execution(public * *(..))
	
	/**
	 * 匹配任意set开头的方法
	 */
//	execution(* set*(..))
	
	/**
	 * 匹配定义在AccountService接口中的方法
	 */
//	execution(* com.xyz.service.AccountService.*(..))
	
	/**
	 * 定义在service包中的方法
	 * 第1个*是declaring-type-pattern
	 * 第2个*是name-pattern
	 */
//	execution(* com.xyz.service.*.*(..))
	
	/**
	 * 定义在service包或者其子包中的方法中的方法
	 */
//	execution(* com.xyz.service..*.*(..))
	
	/**
	 * join point(method only in Spring AOP)
	 */
//	within(com.xyz.service.*)
	
//	within(com.xyz.service..*)
	
	/**
	 * 实现了AccountService接口的类
	 */
//	this(com.xyz.service.AccountService)
	
	/**
	 * target object(被代理的类) 实现了AccountService接口
	 */
//	target(com.xyz.service.AccountService)
	
	/**
	 * 运行时传递的参数类型为：java.io.Serializable
	 * 不同于：execution(* *(java.io.Serializable))
	 */
//	args(java.io.Serializable)
	
	/**
	 * target 有注解org.springframework.transaction.annotation.Transactional
	 */
//	@target(org.springframework.transaction.annotation.Transactional)
	
//	@within(org.springframework.transaction.annotation.Transactional)
	
	/**
	 * 执行的方法有注解org.springframework.transaction.annotation.Transactional
	 */
//	@annotation(org.springframework.transaction.annotation.Transactional)
	
//	@args(com.xyz.security.Classified)
	
	/**
	 * bean name为：tradeService
	 */
//	bean(tradeService)
	
//	bean(*Service)

}
